home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / PowerPlant / AGA Classes 1.2 / Utilities / LAGAGroupBox.cp < prev    next >
Text File  |  1996-06-30  |  7KB  |  227 lines

  1. // ===========================================================================
  2. //    LAGAGroupBox.cp
  3. // ===========================================================================
  4. //    “Apple Grayscale Appearance” compliant primary and secondary group boxes
  5. //    Copyright © 1996 Chrisoft (Christophe ANDRES)  All rights reserved.
  6. //
  7. //    You may use this source code in any application (commercial, shareware, freeware,
  8. //    postcardware, etc), but not remove this notice (no need to acknowledge the use of
  9. //    this class in the about box)
  10. //    You may not sell this source code in any form. This source code may be placed on 
  11. //    publicly accessable archive sites and source code disks. It may not be placed on 
  12. //    profit archive sites and source code disks without the permission of the author, 
  13. //    Christophe ANDRES.
  14. //    
  15. //        This source code is distributed in the hope that it will be useful,
  16. //        but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. //        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  18. //
  19. //    If you make any change or improvement on this class, please send the improved/changed
  20. //    version to : chrisoft@calva.net or Christophe ANDRES
  21. //                                     20, rue Prosper Mérimée
  22. //                                     67100 STRASBOURG
  23. //                                     FRANCE
  24. //
  25. // ===========================================================================
  26. //    LAGAGroupBox.h            <- double-click + Command-D to see classes declaration
  27. //
  28. //    LAGAGroupBox is my implementation of the “Apple Grayscale Appearance for System 7.5”
  29. //        primary group box, except that is can only have a text title and not a popup menu,
  30. //        or a checkbox in its title.
  31. //
  32. //    LAGASecondaryGroupBox is my implementation of the “Apple Grayscale Appearance for System 7.5”
  33. //        secondary group box, except that is can only have a text title and not a popup menu,
  34. //        or a checkbox in its title.
  35. //
  36. //    Note : the CPPb declaration of LAGASecondaryGroupBox, as defined in “LAGASeparator CPPb.rsrc”
  37. //                    requires that the CPPb declaration of LAGAGroupBox is also present
  38. //
  39. //        This class requires AGAColors.cp to be present in your project
  40. //        This class requires LGroupBox.cp to be present in your project
  41. //
  42. //        Version : 1.2
  43. //
  44. //        Change History (most recent first, date in US form : mm/dd/yy):
  45. //
  46. //                        06/30/96    ca        Public release of version 1.2
  47. //                        06/27/96    ca        Changed checks for disabled state (check on triState_On instead of triState_Off)
  48. //                                                            in order that triState_Latent state is drawn as disabled
  49. //                        06/05/96    ca        Added RegisterClass method to ease registry
  50. //                                                        Increased version to 1.2
  51. //                        05/17/96    ca        Increased version to 1.1
  52. //                                                        Added copy constructor
  53. //                                                        Added "on the fly" constructor
  54. //                                                        Replaced UEnvironment::HasFeature(env_SupportsColor) with PaneInColor
  55. //                                                        Added change history
  56. //                        04/22/96    ca        class made available by Christophe ANDRES <chrisoft@calva.net>
  57. //                                                        (version 1.0)
  58. //
  59. //        To Do:
  60. //
  61.  
  62. #include "LAGAGroupBox.h"
  63.  
  64. #include <UEnvironment.h>
  65. #include <UTextTraits.h>
  66. #include    "AGAColors.h"
  67.  
  68. //-------LAGAGroupBox-------------------------------------------------------------------------------------------------
  69.  
  70. //    begin    <06/05/96    ca>
  71. void LAGAGroupBox::RegisterClass ()
  72.  
  73. {
  74.     URegistrar::RegisterClass(LAGAGroupBox::class_ID, (ClassCreatorFunc)LAGAGroupBox::CreateAGAGroupBoxStream);
  75. }
  76. //    end    <06/05/96    ca>
  77.  
  78. LAGAGroupBox* LAGAGroupBox::CreateAGAGroupBoxStream (LStream* inStream)
  79.  
  80. {
  81.     return (new LAGAGroupBox(inStream));
  82. }
  83.  
  84.  
  85. LAGAGroupBox::LAGAGroupBox (LStream *inStream) : LGroupBox(inStream)
  86.  
  87. {
  88.     mFrameColor.red = mFrameColor.blue = mFrameColor.green = 0x8888;
  89. }
  90.  
  91. LAGAGroupBox::LAGAGroupBox (const LAGAGroupBox &inOriginal) : LGroupBox(inOriginal)
  92.  
  93. {
  94. }
  95.  
  96. LAGAGroupBox::LAGAGroupBox (const SPaneInfo &inPaneInfo, Str255 inString, ResIDT inTextTraitsID)
  97.                                                     : LGroupBox(inPaneInfo, inString, inTextTraitsID)
  98.  
  99. {
  100. }
  101.  
  102. void LAGAGroupBox::DrawText (const Rect &inRect)
  103.  
  104. {
  105.     Boolean disabled = (mEnabled != triState_On);                                                                                                            //    <06/27/96    ca>
  106.     // Retrieve info about font again.
  107.  
  108.     Int16 just = UTextTraits::SetPortTextTraits(mTxtrID);
  109.     FontInfo fInfo;
  110.     ::GetFontInfo(&fInfo);
  111.     
  112.     if (::PaneInColor(this))
  113.         {
  114.             RGBColor textColor;
  115.             ::GetForeColor(&textColor);
  116.     
  117.             ApplyForeAndBackColors();
  118.             if (disabled)
  119.                 ::RGBForeColor(&gAGAColorArray[7]);
  120.             else
  121.                 ::RGBForeColor(&textColor);
  122.         }
  123.  
  124.     ::MoveTo(inRect.left + 3, inRect.top + fInfo.ascent + (fInfo.leading >> 1));
  125.     ::DrawString(mText);
  126. }
  127.  
  128. void LAGAGroupBox::DrawBorder (const Rect &inRect)
  129.  
  130. {
  131.     StColorPenState theState;
  132.     Rect theFrame = inRect;
  133.     RGBColor saveColor;
  134.     Boolean disabled = (mEnabled != triState_On);                                                                                                        //    <06/27/96    ca>
  135.             
  136.     // M™H mod: conditional on color
  137.     Boolean hasColor = ::PaneInColor(this);
  138.     
  139.     theFrame.bottom--;
  140.     theFrame.right--;
  141.     
  142.     if (disabled)
  143.         {
  144.             saveColor = mFrameColor;
  145.             if (hasColor)
  146.                 mFrameColor = gAGAColorArray[4];
  147.         }
  148.     LGroupBox::DrawBorder(theFrame);
  149.     if (disabled)
  150.         mFrameColor = saveColor;
  151.     if (hasColor)
  152.         {
  153.             //    If there is no color, there is no need for this
  154.             if (disabled)
  155.                 ::RGBForeColor(&gAGAColorArray[1]);
  156.             else
  157.                 ::ForeColor(whiteColor);
  158.             ::MoveTo(theFrame.left + 1, theFrame.bottom - 2);
  159.             ::LineTo(theFrame.left + 1, theFrame.top + 1);
  160.             ::LineTo(theFrame.right - 2, theFrame.top + 1);
  161.             ::MoveTo(theFrame.left , theFrame.bottom);
  162.             ::LineTo(theFrame.right, theFrame.bottom);
  163.             ::LineTo(theFrame.right, theFrame.top);
  164.         }
  165. }
  166.  
  167. //-------LAGASecondaryGroupBox-------------------------------------------------------------------------------------------------
  168.  
  169. //    begin    <06/05/96    ca>
  170. void LAGASecondaryGroupBox::RegisterClass ()
  171.  
  172. {
  173.     URegistrar::RegisterClass(LAGASecondaryGroupBox::class_ID, (ClassCreatorFunc)LAGASecondaryGroupBox::CreateAGASecondaryGroupBoxStream);
  174. }
  175. //    end    <06/05/96    ca>
  176.  
  177. LAGASecondaryGroupBox* LAGASecondaryGroupBox::CreateAGASecondaryGroupBoxStream (LStream* inStream)
  178.  
  179. {
  180.     return (new LAGASecondaryGroupBox(inStream));
  181. }
  182.  
  183. LAGASecondaryGroupBox::LAGASecondaryGroupBox (LStream *inStream) : LAGAGroupBox(inStream)
  184.  
  185. {
  186. }
  187.  
  188. LAGASecondaryGroupBox::LAGASecondaryGroupBox (const LAGASecondaryGroupBox &inOriginal) : LAGAGroupBox(inOriginal)
  189.  
  190. {
  191. }
  192.  
  193. LAGASecondaryGroupBox::LAGASecondaryGroupBox (const SPaneInfo &inPaneInfo, Str255 inString, ResIDT inTextTraitsID)
  194.                                                                                         : LAGAGroupBox(inPaneInfo, inString, inTextTraitsID)
  195.  
  196. {
  197. }
  198.  
  199. void LAGASecondaryGroupBox::DrawBorder (const Rect &inRect)
  200.  
  201. {
  202.     StColorPenState theState;
  203.     Boolean disabled = (mEnabled != triState_On);                                                                                                //    <06/27/96    ca>
  204.     
  205.     if (::PaneInColor(this))
  206.         {
  207.             //    If there is no color, there is no need for this
  208.             if (disabled)
  209.                 ::RGBForeColor(&gAGAColorArray[4]);
  210.             else
  211.                 ::RGBForeColor(&mFrameColor);
  212.             ::MoveTo(inRect.left, inRect.bottom - 1);
  213.             ::LineTo(inRect.left, inRect.top);
  214.             ::LineTo(inRect.right - 2, inRect.top);
  215.             if (disabled)
  216.                 ::RGBForeColor(&gAGAColorArray[1]);
  217.             else
  218.                 ::ForeColor(whiteColor);
  219.             ::MoveTo(inRect.left + 1, inRect.bottom);
  220.             ::LineTo(inRect.right - 1, inRect.bottom);
  221.             ::LineTo(inRect.right - 1, inRect.top + 1);
  222.         }
  223.     else
  224.         LGroupBox::DrawBorder(inRect);
  225. }
  226.  
  227.